{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zzBv5XkTGur2"
      },
      "source": [
        "# 导入，安装"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "id": "9-xShbR18N_G"
      },
      "outputs": [],
      "source": [
        "\n",
        "\n",
        "from IPython.display import clear_output\n",
        "clear_output(wait=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "metadata": {
        "id": "lp2cLbPS8RhG"
      },
      "outputs": [],
      "source": [
        "import pennylane as qml\n",
        "from pennylane import numpy as np\n",
        "from pennylane.templates import RandomLayers\n",
        "\n",
        "import tensorflow as tf\n",
        "from tensorflow import keras\n",
        "\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "sns.set_theme()\n",
        "\n",
        "from sklearn.decomposition import TruncatedSVD\n",
        "from sklearn.manifold import TSNE"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "w38G4jmvGyzk"
      },
      "source": [
        "# 导入数据"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "do_NKSy-ZEdb"
      },
      "source": [
        "### 由 数据做量子卷积处理（核心）.ipynb 创建的 npy 数据文件已在此处导入。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "metadata": {
        "id": "gOJtRzhk7pXk"
      },
      "outputs": [],
      "source": [
        "x_train_final = np.load(\"x_train_final.npy\")\n",
        "y_train = np.load(\"y_train.npy\")\n",
        "\n",
        "x_test_final = np.load(\"x_test_final.npy\")\n",
        "y_test = np.load(\"y_test.npy\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3z0DcNmj8jWB",
        "outputId": "7acf53d7-a0d4-4668-fee6-1fc16a3f8032"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "((250, 256), (250,), (65, 256), (65,))"
            ]
          },
          "execution_count": 4,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "x_train_final.shape, y_train.shape, x_test_final.shape, y_test.shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BOInXgW1YlhH"
      },
      "source": [
        "## 使用 TruncatedSVD 将每个图像的 256 个特征减少到 4 个，因为在量子电路中为每个图像编码 256 个特征是不可行的。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "CfIBVCzNYq2m"
      },
      "outputs": [],
      "source": [
        "tsvd = TruncatedSVD(n_components=4)\n",
        "x_train_final = tsvd.fit_transform(x_train_final)\n",
        "x_test_final = tsvd.fit_transform(x_test_final)\n",
        "\n",
        "\n",
        "# np.random.seed(0)\n",
        "# tsne = TSNE(n_components=2)\n",
        "# train_data_features_reduced = tsne.fit_transform(X_SVD)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "x8xi56EtbL6w",
        "outputId": "6284cc6c-4d78-4096-e87d-8618431de1f4"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "((250, 4), (65, 4))"
            ]
          },
          "execution_count": 6,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "x_train_final.shape, x_test_final.shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "1Hq0EwtDZ-Va"
      },
      "source": [
        "# 分类器模型说明\n",
        "\n",
        "### 在数据集中，我们有三个类别——Covid19、病毒性肺炎和正常人。\n",
        "\n",
        "### 我们的方法是将分类器分为两个不同的模型。 第一个模型将在“正常人”和“Covid19/病毒性肺炎”类之间进行分类。 第二个模型将在“Covid”和“Viral Penumonia”类之间进行分类\n",
        "\n",
        "### 这里的第一个模型用 Model-1 表示，第二个用 Model-2 表示。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bbj3YRynG3i0"
      },
      "source": [
        "# 分类器Model-1 所需函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 7,
      "metadata": {
        "id": "WmRvuHrfG96o"
      },
      "outputs": [],
      "source": [
        "def statepreparation_1(a):\n",
        "\n",
        "\n",
        "    qml.Hadamard(wires=0)\n",
        "    qml.Hadamard(wires=1)\n",
        "    \n",
        "    qml.RZ(a[0], wires=0)\n",
        "    qml.RZ(a[1], wires=1)\n",
        "    qml.CNOT(wires=[0,1])\n",
        "    qml.RZ(a[0]*a[1], wires=1)\n",
        "    qml.CNOT(wires=[0,1])\n",
        "\n",
        "    qml.Hadamard(wires=0)\n",
        "    qml.Hadamard(wires=1)\n",
        "    \n",
        "    qml.RZ(a[2], wires=0)\n",
        "    qml.RZ(a[3], wires=1)\n",
        "    qml.CNOT(wires=[0,1])\n",
        "    qml.RZ(a[2]*a[3], wires=1)\n",
        "    qml.CNOT(wires=[0,1])\n",
        "\n",
        "\n",
        "    "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "L5MOaNj_HKa2"
      },
      "outputs": [],
      "source": [
        "def layer_1(W):\n",
        "    qml.Rot(W[0, 0], W[0, 1], W[0, 2], wires=0)\n",
        "    qml.Rot(W[1, 0], W[1, 1], W[1, 2], wires=1)\n",
        "    # qml.Rot(W[2, 0], W[2, 1], W[2, 2], wires=2)\n",
        "    \n",
        "    qml.CNOT(wires=[0, 1])\n",
        "    # qml.CNOT(wires=[0, 2])\n",
        "    # qml.CNOT(wires=[1, 2])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "id": "CjT9YycqHMvK"
      },
      "outputs": [],
      "source": [
        "dev_1 = qml.device(\"default.qubit\", wires=2)\n",
        "@qml.qnode(dev_1)\n",
        "def circuit_1(weights, x=None):\n",
        "    \n",
        "    # Feature mapping\n",
        "    statepreparation_1(x)\n",
        "    # variational classifier\n",
        "    for w in weights:\n",
        "        layer_1(w)\n",
        "    \n",
        "    return qml.expval(qml.PauliZ(1))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "id": "pE4EPKw1HUH3"
      },
      "outputs": [],
      "source": [
        "def classifier_training_1(params, x=None, y=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_1(weights, x=x) + bias\n",
        "    return (out_probs-y)**2\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "id": "26WdKy7PHxgQ"
      },
      "outputs": [],
      "source": [
        "def classifier_prediction_1(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_1(weights, x=x) + bias\n",
        "\n",
        "    \n",
        "    if(out_probs>0):\n",
        "        return 1\n",
        "    else:\n",
        "        return -1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "id": "x1jtRUU2H3rF"
      },
      "outputs": [],
      "source": [
        "def circuit_output_test(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit(weights, x=x) + bias\n",
        "\n",
        "    return out_probs\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "id": "h8zNvXOuH7F4"
      },
      "outputs": [],
      "source": [
        "def cost_1(params, X, Y):\n",
        "\n",
        "    y_pred = np.array([classifier_training_1(params, x=X[i], y=Y[i]) for i in range(len(Y))])\n",
        "\n",
        "    cost = np.sum(y_pred) / len(Y)\n",
        "    return cost"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "id": "PnwvdZSDH-c8"
      },
      "outputs": [],
      "source": [
        "def accuracy_1(params, x_train, y_train, iter):\n",
        "\n",
        "    y_pred_train = np.array([classifier_prediction_1(params, x=x) for x in x_train])\n",
        "    acc_train = np.sum(y_pred_train==y_train) / len(y_train)\n",
        "\n",
        "    print(\"Iter=> {}   train_cost=> {}   train_acc=> {} \".format(iter+1, cost_1(params, x_train, y_train), acc_train))\n",
        "\n",
        "    return acc_train\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xaKqVa18IHz6"
      },
      "source": [
        "# 分类器Model-2 所需函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "id": "tMNtf9DcIDmO"
      },
      "outputs": [],
      "source": [
        "def statepreparation_2(a):\n",
        "\n",
        "\n",
        "    qml.Hadamard(wires=0)\n",
        "    qml.Hadamard(wires=1)\n",
        "    \n",
        "    qml.RZ(a[0], wires=0)\n",
        "    qml.RZ(a[1], wires=1)\n",
        "    qml.CNOT(wires=[0,1])\n",
        "    qml.RZ(a[0]*a[1], wires=1)\n",
        "    qml.CNOT(wires=[0,1])\n",
        "\n",
        "    qml.Hadamard(wires=0)\n",
        "    qml.Hadamard(wires=1)\n",
        "    \n",
        "    qml.RZ(a[2], wires=0)\n",
        "    qml.RZ(a[3], wires=1)\n",
        "    qml.CNOT(wires=[0,1])\n",
        "    qml.RZ(a[2]*a[3], wires=1)\n",
        "    qml.CNOT(wires=[0,1])\n",
        "\n",
        "\n",
        "    \n",
        "    \n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "HAXZ-a1aIQqG"
      },
      "outputs": [],
      "source": [
        "def layer_2(W):\n",
        "    qml.Rot(W[0, 0], W[0, 1], W[0, 2], wires=0)\n",
        "    qml.Rot(W[1, 0], W[1, 1], W[1, 2], wires=1)\n",
        "    # qml.Rot(W[2, 0], W[2, 1], W[2, 2], wires=2)\n",
        "    \n",
        "    qml.CNOT(wires=[0, 1])\n",
        "    # qml.CNOT(wires=[0, 2])\n",
        "    # qml.CNOT(wires=[1, 2])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "id": "9EZJ7OJcIT62"
      },
      "outputs": [],
      "source": [
        "dev_2 = qml.device(\"default.qubit\", wires=2)\n",
        "@qml.qnode(dev_2)\n",
        "def circuit_2(weights, x=None):\n",
        "    \n",
        "    # Feature mapping\n",
        "    statepreparation_2(x)\n",
        "    \n",
        "    # variational classifier\n",
        "    for w in weights:\n",
        "        layer_2(w)\n",
        "    \n",
        "    return qml.expval(qml.PauliZ(1))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "id": "iumVNlMWIcDg"
      },
      "outputs": [],
      "source": [
        "def classifier_training_2(params, x=None, y=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_2(weights, x=x) + bias\n",
        "    return (out_probs-y)**2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "id": "aC47T9L6Ih2V"
      },
      "outputs": [],
      "source": [
        "def classifier_prediction_2(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_2(weights, x=x) + bias\n",
        "\n",
        "    \n",
        "    if(out_probs>0):\n",
        "        return 1\n",
        "    else:\n",
        "        return -1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "id": "Lix_uPNYIlJT"
      },
      "outputs": [],
      "source": [
        "def cost_2(params, X, Y):\n",
        "\n",
        "    y_pred = np.array([classifier_training_2(params, x=X[i], y=Y[i]) for i in range(len(Y))])\n",
        "\n",
        "    cost = np.sum(y_pred) / len(Y)\n",
        "    return cost\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "id": "yZAVHcVOIoXE"
      },
      "outputs": [],
      "source": [
        "def accuracy_2(params, x_train, y_train, iter):\n",
        "\n",
        "    y_pred_train = np.array([classifier_prediction_2(params, x=x) for x in x_train])\n",
        "    acc_train = np.sum(y_pred_train==y_train) / len(y_train)\n",
        "\n",
        "    print(\"Iter=> {}   train_cost=> {}   train_acc=> {} \".format(iter+1, cost_2(params, x_train, y_train), acc_train))\n",
        "\n",
        "    return acc_train\n",
        "    "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3-jPuIBwItKu"
      },
      "source": [
        "# Model-1"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3BFJgYEPKMlX"
      },
      "source": [
        "## Model-1 的数据\n",
        "0->新冠肺炎，1->正常，2->肺炎"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LNCzJd3UamAp"
      },
      "source": [
        "#### 此处的标签已针对 Model-1 进行了相应修改"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {
        "id": "DC-vze_qIrlM"
      },
      "outputs": [],
      "source": [
        "x_train_1 = np.copy(x_train_final)\n",
        "y_train_1 = []\n",
        "\n",
        "for i in range(len(y_train)):\n",
        "    if(y_train[i]==0 or y_train[i]==2):  ##Covid or pneumonia\n",
        "        y_train_1.append(-1)\n",
        "    elif(y_train[i]==1):  ##normal person\n",
        "        y_train_1.append(1)\n",
        "\n",
        "y_train_1 = np.array(y_train_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xhZkWLIDLjiY"
      },
      "source": [
        "## 二分类 Model-1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "YylpUnE0K7Y5",
        "outputId": "bcf0dcd8-37ad-4fc7-c64c-454415e94bd9"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(tensor([[[ 0.01168377,  0.00207123,  0.01108567],\n",
              "          [ 0.0161775 ,  0.01056683, -0.01069625]],\n",
              " \n",
              "         [[ 0.01289499,  0.00993765, -0.00106323],\n",
              "          [-0.00879334, -0.01935086,  0.00173846]]], requires_grad=True), 0.0)"
            ]
          },
          "execution_count": 23,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "params_1 = (0.01 * np.random.randn(2, 2, 3), 0.0)\n",
        "params_1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 24,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "nHkAyNQ3LTbW",
        "outputId": "363f8bd3-c625-4ec5-bd85-3f3e44d62d0f"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Iter=> 1   train_cost=> 1.0348610276447712   train_acc=> 0.652 \n",
            "Iter=> 2   train_cost=> 1.027567824906426   train_acc=> 0.656 \n",
            "Iter=> 3   train_cost=> 1.0125761775938904   train_acc=> 0.648 \n",
            "Iter=> 4   train_cost=> 0.9855788238745938   train_acc=> 0.648 \n",
            "Iter=> 5   train_cost=> 0.9470821054751705   train_acc=> 0.668 \n",
            "Iter=> 6   train_cost=> 0.9089055391278965   train_acc=> 0.668 \n",
            "Iter=> 7   train_cost=> 0.8836045476752277   train_acc=> 0.68 \n",
            "Iter=> 8   train_cost=> 0.8711020460304444   train_acc=> 0.676 \n",
            "Iter=> 9   train_cost=> 0.8647179397210433   train_acc=> 0.684 \n",
            "Iter=> 10   train_cost=> 0.8590301300073135   train_acc=> 0.664 \n",
            "Iter=> 11   train_cost=> 0.8516275156378001   train_acc=> 0.676 \n",
            "Iter=> 12   train_cost=> 0.8421229266774622   train_acc=> 0.668 \n",
            "Iter=> 13   train_cost=> 0.8309048433256314   train_acc=> 0.664 \n",
            "Iter=> 14   train_cost=> 0.8192354723426011   train_acc=> 0.68 \n",
            "Iter=> 15   train_cost=> 0.8094895542407462   train_acc=> 0.68 \n",
            "Iter=> 16   train_cost=> 0.8036458132425125   train_acc=> 0.692 \n",
            "Iter=> 17   train_cost=> 0.8016170784514034   train_acc=> 0.712 \n",
            "Iter=> 18   train_cost=> 0.8015775442956978   train_acc=> 0.716 \n",
            "Iter=> 19   train_cost=> 0.8014571131215886   train_acc=> 0.724 \n",
            "Iter=> 20   train_cost=> 0.8000754259017073   train_acc=> 0.704 \n"
          ]
        }
      ],
      "source": [
        "iters = 20\n",
        "optimizer_1 = qml.NesterovMomentumOptimizer(stepsize=0.5)\n",
        "\n",
        "cost_list_1 = []\n",
        "train_acc_list_1 = []\n",
        "\n",
        "for iter in range(iters):\n",
        "    params_1 = optimizer_1.step(lambda v: cost_1(v, x_train_1, y_train_1), params_1)\n",
        "\n",
        "    cost_list_1.append(cost_1(params_1, x_train_1, y_train_1))\n",
        "    train_acc_list_1.append(accuracy_1(params_1, x_train_1, y_train_1, iter))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WJR_CZxnbCQQ"
      },
      "source": [
        "## Model-1 损失函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "mSfkeIQjbJaQ",
        "outputId": "a2808f5f-22a0-4bd6-beff-8ee29285c625"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f81f31cd610>]"
            ]
          },
          "execution_count": 25,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(cost_list_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "DlXbxvn7bMIb"
      },
      "source": [
        "## Model-1 训练精度图"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "EA2bGcwbbQP7",
        "outputId": "e96c231c-619a-40b0-93a9-ffae901ed780"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f81f347ac90>]"
            ]
          },
          "execution_count": 27,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(train_acc_list_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EuG6oxpIR95T"
      },
      "source": [
        "# Model-2"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "up0q4ehrR_9r"
      },
      "source": [
        "## Model-2 数据\n",
        "0->新冠肺炎，1->正常，2->肺炎"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "44II7vAEbYTy"
      },
      "source": [
        "#### 此处的标签已针对 Model-2 进行了相应修改"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "metadata": {
        "id": "MG-55rGiSGaI"
      },
      "outputs": [],
      "source": [
        "x_train_2 = []\n",
        "y_train_2 = []\n",
        "\n",
        "for i in range(len(y_train)):\n",
        "    if(y_train[i]==0):   ## covid\n",
        "        x_train_2.append(x_train_final[i])\n",
        "        y_train_2.append(1)\n",
        "    elif(y_train[i]==2):  ## pneumonia\n",
        "        x_train_2.append(x_train_final[i])\n",
        "        y_train_2.append(-1)\n",
        "\n",
        "\n",
        "x_train_2 = np.array(x_train_2)\n",
        "y_train_2 = np.array(y_train_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d-DYdwjIS4_T"
      },
      "source": [
        "## 二分类 Model-2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "osCtRvneS3FM",
        "outputId": "b2f242c0-84a7-4426-b21b-f0a3f75f40b5"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(tensor([[[ 0.00982229, -0.01051254, -0.00914393],\n",
              "          [ 0.00723045,  0.02842324,  0.02840841]],\n",
              " \n",
              "         [[ 0.01032002, -0.00327675, -0.00191936],\n",
              "          [-0.01266729, -0.00914445, -0.00208504]]], requires_grad=True), 0.0)"
            ]
          },
          "execution_count": 29,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "params_2 = (0.01 * np.random.randn(2, 2, 3), 0.0)\n",
        "params_2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "uKoRU8xBTEiL",
        "outputId": "26a33c3c-5da7-4b89-f922-a542bb932569"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Iter=> 1   train_cost=> 1.2614721878608255   train_acc=> 0.4666666666666667 \n",
            "Iter=> 2   train_cost=> 1.2355844199126527   train_acc=> 0.5388888888888889 \n",
            "Iter=> 3   train_cost=> 1.219687970878121   train_acc=> 0.5277777777777778 \n",
            "Iter=> 4   train_cost=> 1.2143219322766938   train_acc=> 0.5444444444444444 \n",
            "Iter=> 5   train_cost=> 1.2128913745419498   train_acc=> 0.5555555555555556 \n",
            "Iter=> 6   train_cost=> 1.2091136338732122   train_acc=> 0.55 \n",
            "Iter=> 7   train_cost=> 1.2007423257853913   train_acc=> 0.5555555555555556 \n",
            "Iter=> 8   train_cost=> 1.1889561153269006   train_acc=> 0.5611111111111111 \n",
            "Iter=> 9   train_cost=> 1.175910452260856   train_acc=> 0.5611111111111111 \n",
            "Iter=> 10   train_cost=> 1.162933961294422   train_acc=> 0.5444444444444444 \n",
            "Iter=> 11   train_cost=> 1.1502248304824492   train_acc=> 0.5277777777777778 \n",
            "Iter=> 12   train_cost=> 1.1374995762124938   train_acc=> 0.5166666666666667 \n",
            "Iter=> 13   train_cost=> 1.1246758401958146   train_acc=> 0.5166666666666667 \n",
            "Iter=> 14   train_cost=> 1.1120837835201536   train_acc=> 0.5277777777777778 \n",
            "Iter=> 15   train_cost=> 1.1002562114858783   train_acc=> 0.5388888888888889 \n",
            "Iter=> 16   train_cost=> 1.0896133246073896   train_acc=> 0.5611111111111111 \n",
            "Iter=> 17   train_cost=> 1.0802927796733701   train_acc=> 0.5666666666666667 \n",
            "Iter=> 18   train_cost=> 1.0721744595066323   train_acc=> 0.5833333333333334 \n",
            "Iter=> 19   train_cost=> 1.0650063407002008   train_acc=> 0.5777777777777777 \n",
            "Iter=> 20   train_cost=> 1.058519637353856   train_acc=> 0.5666666666666667 \n"
          ]
        }
      ],
      "source": [
        "iters = 20\n",
        "optimizer_2 = qml.NesterovMomentumOptimizer(stepsize=0.1)\n",
        "\n",
        "cost_list_2 = []\n",
        "train_acc_list_2 = []\n",
        "\n",
        "for iter in range(iters):\n",
        "    params_2 = optimizer_2.step(lambda v: cost_2(v, x_train_2, y_train_2), params_2)\n",
        "\n",
        "    cost_list_2.append(cost_2(params_2, x_train_2, y_train_2))\n",
        "    train_acc_list_2.append(accuracy_2(params_2, x_train_2, y_train_2, iter))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hMXTbea5b8Dl"
      },
      "source": [
        "## Model-2 损失函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "EK1f0lJVb_x8",
        "outputId": "04a888a8-8d1d-4d64-ea71-ff73ca2076ef"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f81f46ed090>]"
            ]
          },
          "execution_count": 31,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(cost_list_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Gt_cb42hcBwE"
      },
      "source": [
        "##  Model-2 训练精确图"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "1GfGICSMcFU1",
        "outputId": "6a147206-ac13-42c5-8f13-458be9290ffc"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f81f33cf2d0>]"
            ]
          },
          "execution_count": 32,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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fiGEUBkJfiGEUBmHmeuo1bZ9Pf32PNYapL72kfraR+prP3us8U41aRRFUaxYixBCCBuToR4hhFAZCX4hhFAZCX4hhFAZCX4hhFAZCX4hhFAZCX4hhFAZCX4hhFAZCX4hhFAZCX4hhFAZh1my4U7S09NZsmQJJSUleHt7s3LlSkJCQm5pYzabee211zhw4AAajYZnn32W2bNnd3ptxcXFvPjii2RmZuLs7Ezv3r155ZVX8PX1vaXdkiVL+Pbbb/Hx8QEgOjqaf/u3f+v0+gAmTJiAs7MzLi4uAPz+979nzJgxt7Sprq7mpZdeIikpCZ1Ox+LFixk/frxV6rty5Qq//e1vG/5dXl5ORUUF33///S3tVq9ezbp16wgICABgyJAhLFu2rMPrWblyJV999RVZWVls27aNfv36AS3rh2CdvthUjS3ti9D5/fF272FL+iJ0fn9sqr6W9kOwXl9sM6ULePzxx5UtW7YoiqIoW7ZsUR5//PFGbT777DPl6aefVsxms1JYWKiMGTNGuXz5cqfXVlxcrHz33XcN/37jjTeUl156qVG7xYsXKx9++GGn19OU8ePHKz/++OMd26xevVr5wx/+oCiKoqSnpyujRo1SKioqrFFeI6+99pqyYsWKRre/8847yhtvvNHpxz969KiSnZ3d6H1rST9UFOv0xaZqbGlfVJTO74+3ew9b0hcVpfP74+3qu9nt+qGiWK8vtpXDD/UUFhaSnJxMTEwMADExMSQnJ1NUVHRLux07djB79my0Wi2+vr5MmjSJL7/8stPr8/b25r777mv496BBg8jOzu7043a0L774gri4OABCQkKIiIhg//79Vq+jtraWbdu28eijj1r92DcMGzYMo9F4y20t7Ydgnb7YVI321Bebqq81Ors/NlefPfTD9nD44M/JySEwMBCdTgeATqcjICCAnJycRu2CgoIa/m00Grl69apVa7VYLHz88cdMmDChyfvfe+89pk2bxoIFC7hw4YJVa/v973/PtGnTWL58OWVlZY3uz87OpmfPng3/tsX7B7B7924CAwMZMGBAk/dv376dadOm8fTTT3PixAmr1dXSfnijrb33RbBdf2yuL4Lt+2Nz/RBs1xdbwuGD35G8+uqruLu78+tf/7rRfb/73e/YuXMn27ZtY/LkycydOxez2WyVutauXcvnn3/Opk2bUBSFV155xSrHbYtNmzbd9iwrPj6eXbt2sW3bNp555hkWLFhAcXGxlSt0DHfqi2C7/ugoffFO/RDsvy86fPAbjUZyc3MbOqXZbCYvL6/RxzSj0XjLx9qcnBx69OhhtTpXrlzJpUuX+Mtf/oJW2/htDwwMbLh9xowZVFVVWe0M5sZ75ezsTEJCAsePH2/UJigoiKysrIZ/W/v9A8jNzeXo0aNMmzatyfsNBgN6vR6A0aNHYzQaSU1NtUptLe2HN9rac18E2/XHlvRFsG1/bK4fgm37Yks4fPD7+flhMplITEwEIDExEZPJ1GimQnR0NBs2bMBisVBUVMQ333zDlClTrFLjqlWrOHv2LH/9619xdnZusk1ubm7DzwcOHECr1RIYGNjptVVVVVFeXg6Aoijs2LEDk8nUqF10dDTr168HICMjgzNnzjQ526IzffbZZ4wbN65hpskv3fwepqSkkJWVRWhoqFVqa2k/BPvvi2Cb/tjSvgi27Y/N9UOwbV9sEdt+t9wx0tLSlFmzZimTJ09WZs2apVy4cEFRFEWZO3eucvr0aUVRFKW+vl5ZunSpMnHiRGXixInKJ598YpXazp8/r/Tr10+ZPHmyMn36dGX69OnKggULFEVRlOnTpytXr15VFEVRnnzySSUmJkaZNm2a8thjjyknTpywSn2ZmZlKbGysEhMTo0ydOlVZuHChkpub26i+yspKZeHChcqkSZOUyZMnKzt37rRKfTebPHmysm/fvltuu/l3/OKLLyoPP/ywMm3aNOWRRx5R9u7d2yl1vPrqq8qYMWMUk8mkjBo1Spk6daqiKLfvh7+s0xp9saka79QXFcW6/bGp+u7UF39ZX2f3x9v9jhWl6X6oKLbpi20lO3AJIYTKOPxQjxBCiNaR4BdCCJWR4BdCCJWR4BdCCJWR4BdCCJWR4BdCCJWR4BdCCJWR4BdCCJX5/z9b3IkZfnipAAAAAElFTkSuQmCC",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(train_acc_list_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "wKuT5KBeTiQk"
      },
      "source": [
        "# 预测"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bx_Iy3g1ch3k"
      },
      "source": [
        "### 在预测时，我们首先向 Model-1 提供输入。 如果它预测为正常人，那么它是分配给输入的最终预测。 如果不是，那么我们给 Model-2 提供相同的输入，它最终预测胸部 X 光片是 Covid10 患者还是病毒性肺炎患者。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 33,
      "metadata": {
        "id": "7Y1yxaM9Tao4"
      },
      "outputs": [],
      "source": [
        "y_pred = []\n",
        "\n",
        "for i in range(len(x_test_final)):\n",
        "    tmp = classifier_prediction_1(params_1, x=x_test_final[i])\n",
        "    if (tmp == 1):  ## Normal person\n",
        "        y_pred.append(1)\n",
        "    else:   ## Covid or Pneumonia\n",
        "        tmp = classifier_prediction_2(params_2, x=x_test_final[i])\n",
        "        if(tmp == 1):  ## covid\n",
        "            y_pred.append(0)\n",
        "        elif(tmp == -1): ## Pneumonia\n",
        "            y_pred.append(2)\n",
        "\n",
        "y_pred = np.array(y_pred)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 34,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "r1trY_8EUuaM",
        "outputId": "85e665ad-b003-410a-cd9e-8c9d275c849c"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Final_Test_Accuracy =>  0.4461538461538462\n"
          ]
        }
      ],
      "source": [
        "print(\"Final_Test_Accuracy => \", np.sum(y_pred==y_test)/len(y_test))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FUB3hkEScktx"
      },
      "source": [
        "### 当它在具有更大数据集的真实计算机上进行训练时，我们希望提高这种准确性。\n"
      ]
    }
  ],
  "metadata": {
    "colab": {
      "collapsed_sections": [
        "zzBv5XkTGur2",
        "w38G4jmvGyzk",
        "bbj3YRynG3i0",
        "xaKqVa18IHz6",
        "3-jPuIBwItKu",
        "EuG6oxpIR95T",
        "up0q4ehrR_9r",
        "wKuT5KBeTiQk"
      ],
      "name": "quantum_classifier_2.ipynb",
      "provenance": [],
      "toc_visible": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.8.8"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
